package com.wxwyapp.controller;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.frame.ar.hander.DataHander;
import com.frame.ar.kit.ObjKit;
import com.frame.ar.util.MapUtil;
import com.frame.hander.SearchParamHander;
import com.frame.jfinal.controller.BaseController;
import com.jfinal.aop.Before;
import com.jfinal.kit.StrKit;
import com.justep.baas.data.Table;
import com.justep.baas.data.Transform;
import com.justep.baas.data.Util;
import com.weixin.interceptor.WeiXinLoinInterceptor;
import com.weixin.model.AppUser;

/**
 * 作用描述：公共--数据查询接口
 * @author LRC
 * @createDate 2015年9月28日
 * @version v1.0 
 * @updateRecord 格式：时间，作者，修改说明
 **
 * 使用com.alibaba.fastjson.JSONObject
 */
@Before(WeiXinLoinInterceptor.class)
public class DbQueryController extends BaseController {
	
	public void queryWeX5Data(){
		//获取查询参数
		String strData = getPara("params");
		JSONObject params = (JSONObject) JSONObject.parse(strData);
		//获取查询列
		Object columns = params.get("columns");
		//获取分页查询参数
		Integer limit = params.getInteger("limit");
		Integer offset = params.getInteger("offset");
		//获取查询字段
		String search = params.getString("searchs");
		JSONObject searchParams = params.getJSONObject("searchParams");
		String tableName = params.getString("tableName");
		String dbSource = params.getString("dbSource");
		
		// 存放SQL中的参数值
		
		// 构造过滤条件 房号查询
		List<String> filters = new ArrayList<String>();
		
		net.sf.json.JSONObject searchVals = new net.sf.json.JSONObject();//查询返回参数
		
		List<Object> sqlParams = new ArrayList<Object>();;
		
		if (!Util.isEmptyString(search)) {
			
			String[] searchs = search.split(",");
			
			sqlParams = SearchParamHander.getSQLParams(searchs, searchParams, filters, searchVals);
		}
		
		Table table = null;
		
		try {
			table = Util.queryData(dbSource, tableName, columns, filters, "id ASC", sqlParams, offset, limit);
			JSONObject json = Transform.tableToJson(table);
			renderText(json.toString());
		} catch (SQLException e) {
			e.printStackTrace();
			renderError(500);
		}
	}
	
	/**
	 * 功能描述：通过dataHander组件获取数据
	 * @createDate 2015年10月24日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public void findData(){
		String dataId = getPara("dataId");
		String params = getPara("params");
		Map<String,Object> base = null;
		if(StrKit.isBlank(params)){
			base = MapUtil.create(this, null);
		}else{
			base = new HashMap<String,Object>();
			net.sf.json.JSONObject data = net.sf.json.JSONObject.fromObject(params);
			MapUtil.copyToMap(data, base, null);
		}
		try {
			if(ObjKit.isBank(dataId)){
				dataId = base.get("dataId").toString();
			}
			//装载用户信息
			AppUser user = AppUser.getCurrentUser();
			if(user!=null){
				String personId = user.getStr("personId");
				base.put("personId", personId);
			}
			Object obj = DataHander.getData(dataId, base);
			renderJson(obj);
		} catch (Exception e) {
			e.printStackTrace();
			renderText("服务端请求处理异常");
		}
	}
	
	/**
	 * 功能描述：返回table数据格式
	 * @createDate 2015年10月24日 by LRC 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public void findTableData(){
		String dataId = getPara("dataId");
		String params = getPara("params");
		Map<String,Object> base = null;
		if(StrKit.isBlank(params)){
			base = MapUtil.create(this, null);
		}else{
			base = new HashMap<String,Object>();
			net.sf.json.JSONObject data = net.sf.json.JSONObject.fromObject(params);
			MapUtil.copyToMap(data, base, null);
		}
		try {
			//装载用户信息
			AppUser user = AppUser.getCurrentUser();
			if(user!=null){
				String personId = user.getStr("personId");
				base.put("personId", personId);
			}
			Object obj = DataHander.getData(dataId, base);
			if(obj instanceof Table){
				Table table = (Table) obj;
				JSONObject json = Transform.tableToJson(table );
				renderText(json.toString());
			}else{
				renderJson(obj);
			}
		} catch (Exception e) {
			e.printStackTrace();
			renderText("服务端请求处理异常");
		}
	}
}
